import random, math

proc privateKey*(p: int): int =
  rand(2..<p)

proc publicKey*(p, g, privateKey: int): int =
  g ^ privateKey mod p

proc secret*(p, theirPublicKey, myPrivateKey: int): int =
  theirPublicKey ^ myPrivateKey mod p